﻿using System;
using System.Collections.Generic;
using System.Text;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

namespace BussinessLogicTecnoPez.Produccion.Compras
{
    [Serializable]
    [DBTable("OFERTAS")]
    public class OfertaProveedor : EntityBase<OfertaProveedor>
    {
        private int idOferta;
        private Proveedor objProveedor;
        private DateTime fechaCarga;
        private DateTime fechaVencimiento;
        private string observaciones;
        private TipoMoneda objTipoMoneda;
        private decimal monto;
        private string presupuesto;

        private DetalleOfertaProveedor objDetalleOfertaProveedor;
        private FactoresOfertaProveedor objFactoresOfertaProveedor;

        [FriendlyName("Código",true,true, FriendlyName.FilterType.Integer)]
        [DBField("IDOFERTA",true,true)]
        public int IdOferta
        {
            get { return idOferta; }
            set { idOferta = value; }
        }

        [NotNullValidator(MessageTemplate="Proveedor: debe tener algún valor.")]
        [FriendlyName("Proveedor", true)]
        [DBField("IDPROVEEDOR", false, false, true, "IDPROVEEDOR")]
        public Proveedor Proveedor
        {
            get { return objProveedor; }
            set { objProveedor = value; }
        }

        [NotNullValidator(MessageTemplate = "Fecha carga: debe tener algún valor.")]
        [FriendlyName("Fecha Carga", false)]
        [DBField("FECHACARGA", false, false)]
        public DateTime FechaCarga
        {
            get { return fechaCarga; }
            set { fechaCarga = value; }
        }

        [NotNullValidator(MessageTemplate = "Fecha vencimiento: debe tener algún valor.")]
        [FriendlyName("Fecha Vencimiento", false)]
        [DBField("FECHAVENCIMIENTO", false, false)]
        public DateTime FechaVencimiento
        {
            get { return fechaVencimiento; }
            set { fechaVencimiento = value; }
        }

        [FriendlyName("Fecha Vencimiento", true)]
        public string FechaVencimientoString
        {
            get { return fechaVencimiento.ToShortDateString(); }
        }

        [FriendlyName("Observaciones", false)]
        [DBField("OBSERVACIONES", false, false)]
        public string Observaciones
        {
            get { return observaciones; }
            set { observaciones = value; }
        }

        [NotNullValidator(MessageTemplate="Moneda: debe tener algún valor.")]
        [FriendlyName("Moneda", true)]
        [DBField("IDTIPOMONEDA", false, false, true, "IDTIPOMONEDA")]
        public TipoMoneda TipoMoneda
        {
            get { return objTipoMoneda; }
            set { objTipoMoneda = value; }
        }

        [FriendlyName("Monto", true)]
        [DBField("MONTO", false, false)]
        public decimal Monto
        {
            get { return monto; }
            set { monto = value; }
        }

        [FriendlyName("Presupuesto", false)]
        [DBField("PRESUPUESTO", false, false)]
        public string Presupuesto
        {
            get { return presupuesto; }
            set { presupuesto = value; }
        }

        [NotNullValidator(MessageTemplate="La oferta debe incluir al menos un item.")]
        [DBFieldDetail("IDOFERTA", typeof(ItemDetalleOfertaProveedor))]
        public DetalleOfertaProveedor DetalleOfertaProveedor
        {
            get { return objDetalleOfertaProveedor; }
            set { objDetalleOfertaProveedor = value; }
        }

        [DBFieldDetail("IDOFERTA", typeof(FactorOfertaProveedor))]
        public FactoresOfertaProveedor FactoresOfertaProveedor
        {
            get { return objFactoresOfertaProveedor; }
            set { objFactoresOfertaProveedor = value; }
        }

        public override string ToString()
        {
            return this.IdOferta.ToString();
        }
    }
}
